/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import dominio.Cancion;
import java.io.*;
import java.util.*;

/**
 *
 * @author VWV
 */
public class ManejoStream implements IPersistencia {

    private String entrada;
    private String salida;

    public ManejoStream() {
        entrada = "archivos/stream/cancionesGuardadas.lol";
        salida = "archivos/stream/cancionesNuevas.lol";
    }

    public ManejoStream(String entrada, String salida) {
        this.entrada = entrada;
        this.salida = salida;
    }

    public List<Cancion> leerCanciones() {
        List<Cancion> cancionesPorEnviar = null;
        try {

            ObjectInputStream reader = new ObjectInputStream(new FileInputStream(entrada));
            Object posibleLista = reader.readObject();
            if (posibleLista instanceof List) {
                cancionesPorEnviar = (List<Cancion>) posibleLista;
            } else {
                System.out.println("Tipo de objeto no esperado");
            }
            reader.close();

        } catch (ClassNotFoundException ex) {
            System.out.println("No se encontro la clase correspondiente al objeto leido del stream");
        } catch (FileNotFoundException ex) {
            System.out.println("No se encontro el archivo necesario para leer el stream");
        } catch (IOException ex) {
            System.out.println("Error de I/O al tratar de leer el stream");
        }

        return cancionesPorEnviar;
    }

    public void escribirCanciones(List<Cancion> canciones) {
        if (canciones != null) {
            try {

                ObjectOutputStream writer = new ObjectOutputStream(new FileOutputStream(salida));
                writer.writeObject(canciones);
                writer.close();

            } catch (FileNotFoundException ex) {
                System.out.println("No se encontro el archivo donde se van a guardar los objetos");
            } catch (IOException ex) {
                System.out.println("Error de I/O al guardar el stream de objetos");
            }
        } else {
            System.out.println("no se puede persistir una lista de canciones vacia");
        }
    }

    /**
     * @return the entrada
     */
    public String getEntrada() {
        return entrada;
    }

    /**
     * @param entrada the entrada to set
     */
    public void setEntrada(String entrada) {
        this.entrada = entrada;
    }

    /**
     * @return the salida
     */
    public String getSalida() {
        return salida;
    }

    /**
     * @param salida the salida to set
     */
    public void setSalida(String salida) {
        this.salida = salida;
    }
}
